use anyhow::Result;
use automation::spider_utils::{SpiderClient, CrawlConfiguration};
use automation::init_logger;
use log::info;
use std::path::Path;

#[tokio::main]
async fn main() -> Result<()> {
    // 初始化日志系统
    init_logger();
    // 创建一个爬虫客户端
    let mut client = SpiderClient::new(
        "https://cisco.github.io/ChezScheme/csug/",
        None, // 使用默认配置
    );

    // 更新配置
    client.update_config(|config| {
        config.verbose = true;     // 启用详细日志
        config.depth = 1;          // 限制爬取深度
        config.page_limit = 5;     // 限制爬取页面数量
        config.user_agent = Some("SpiderClientExample/1.0".to_string());
    });

    // 示例1: 爬取网站并获取结果
    info!("示例1: 爬取网站并获取结果");
    let results = client.crawl().await?;
    info!("爬取到 {} 个页面", results.len());

    // 示例2: 爬取网站并保存到目录
    info!("示例2: 爬取网站并保存到目录");
    let output_dir = Path::new("resources/client_example");
    let (saved_count, total_count) = client.crawl_and_save(output_dir).await?;
    info!("保存了 {}/{} 个页面", saved_count, total_count);

    // 示例3: 使用全新配置
    info!("示例3: 使用全新配置");
    let new_config = CrawlConfiguration {
        respect_robots_txt: false,
        subdomains: true,
        tld: false,
        delay: 200,
        depth: 2,
        page_limit: 10,
        timeout: 60,
        user_agent: Some("NewConfig/1.0".to_string()),
        verbose: true,
        whitelist_url: None,
        blacklist_url: None,
    };

    client.set_config(new_config);

    // 爬取另一个网站
    client = SpiderClient::new(
        "https://doc.rust-lang.org/book/",
        Some(client.get_config().clone()),
    );

    let output_dir = Path::new("resources/rust_book");
    let (saved_count, total_count) = client.crawl_and_save(output_dir).await?;
    info!("保存了 {}/{} 个页面", saved_count, total_count);

    Ok(())
}
